
package com.siashan.unipay4j.wx.model.refund;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

/**
 * 审请退款
 *
 * @author siashan
 * @since 2.0.1
 */
@Getter
@Setter
@NoArgsConstructor
public class ApplyRefundModel {

    /**
     * 原支付交易对应的微信订单号
     *
     * @apiNote 与out_trade_no 二选一
     */
    @JSONField(name = "transaction_id")
    private String transactionId;
    /**
     * 原支付交易对应的商户订单号
     */
    @JSONField(name = "out_trade_no")
    private String outTradeNo;

    /**
     * 商户退款单号
     *
     * @apiNote 商户系统内部的退款单号，商户系统内部唯一，只能是数字、大小写字母_-|*@ ，同一退款单号多次请求只退一笔。
     */
    @JSONField(name = "out_refund_no")
    private String outRefundNo;

    /**
     * 退款原因
     *
     * @apiNote 非必传
     */
    private String reason;


    /**
     * 通知地址
     *
     * @apiNote 异步接收微信支付退款结果通知的回调地址，通知url必须为外网可访问的url，不能携带参数。 如果参数中传了notify_url，则商户平台上配置的回调地址将不会生效，优先回调当前传的这个地址。
     */
    @JSONField(name = "notify_url")
    private String notifyUrl;


    /**
     * 退款资金来源
     *
     * 非必传
     *
     * @apiNote 若传递此参数则使用对应的资金账户退款，否则默认使用未结算资金退款（仅对老资金流商户适用）
     * 枚举值：
     * AVAILABLE：可用余额账户
     */
    @JSONField(name = "funds_account")
    private String fundsAccount;

    /**
     * 金额信息
     */
    private RefundAmount amount;


    /**
     * 退款商品
     *
     * @apiNote 指定商品退款需要传此参数，其他场景无需传递
     */
    @JSONField(name = "goods_detail")
   private RefundGoodsDetail[] goodsDetail;
}
